package org.wu.framework.ssh.server.platform.application.impl;

import org.wu.framework.lazy.orm.web.plus.stereotype.LazyApplication;
import org.wu.framework.ssh.server.platform.application.SshServerConfigApplication;
import org.wu.framework.ssh.server.platform.application.command.ssh.server.config.*;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
import org.wu.framework.ssh.server.platform.domain.model.ssh.server.config.SshServerConfig;
import org.wu.framework.ssh.server.platform.application.assembler.SshServerConfigDTOAssembler;
import org.wu.framework.ssh.server.platform.application.dto.SshServerConfigDTO;
import java.util.stream.Collectors;
import jakarta.annotation.Resource;
import org.wu.framework.ssh.server.platform.domain.model.ssh.server.config.SshServerConfigRepository;
import java.util.List;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;

/**
 * describe ssh服务器信息 
 *
 * @author Jia wei Wu
 * @date 2025/09/13 10:07 晚上
 * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplicationImpl 
 **/
@LazyApplication
public class SshServerConfigApplicationImpl implements SshServerConfigApplication {

    @Resource
    SshServerConfigRepository sshServerConfigRepository;
    /**
     * describe 新增ssh服务器信息
     *
     * @param sshServerConfigStoryCommand 新增ssh服务器信息     
     * @return {@link Result<SshServerConfig>} ssh服务器信息新增后领域对象     
     
     * @author Jia wei Wu
     * @date 2025/09/13 10:07 晚上
     **/

    @Override
    public Result<SshServerConfig> story(SshServerConfigStoryCommand sshServerConfigStoryCommand) {
        SshServerConfig sshServerConfig = SshServerConfigDTOAssembler.INSTANCE.toSshServerConfig(sshServerConfigStoryCommand);
        return sshServerConfigRepository.story(sshServerConfig);
    }
    /**
     * describe 批量新增ssh服务器信息
     *
     * @param sshServerConfigStoryCommandList 批量新增ssh服务器信息     
     * @return {@link Result<List<SshServerConfig>>} ssh服务器信息新增后领域对象集合     
     
     * @author Jia wei Wu
     * @date 2025/09/13 10:07 晚上
     **/

    @Override
    public Result<List<SshServerConfig>> batchStory(List<SshServerConfigStoryCommand> sshServerConfigStoryCommandList) {
        List<SshServerConfig> sshServerConfigList = sshServerConfigStoryCommandList.stream().map( SshServerConfigDTOAssembler.INSTANCE::toSshServerConfig).collect(Collectors.toList());
        return sshServerConfigRepository.batchStory(sshServerConfigList);
    }
    /**
     * describe 更新ssh服务器信息
     *
     * @param sshServerConfigUpdateCommand 更新ssh服务器信息     
     * @return {@link Result<SshServerConfig>} ssh服务器信息领域对象     
     
     * @author Jia wei Wu
     * @date 2025/09/13 10:07 晚上
     **/

    @Override
    public Result<SshServerConfig> updateOne(SshServerConfigUpdateCommand sshServerConfigUpdateCommand) {
        SshServerConfig sshServerConfig = SshServerConfigDTOAssembler.INSTANCE.toSshServerConfig(sshServerConfigUpdateCommand);
        return sshServerConfigRepository.story(sshServerConfig);
    }

    /**
     * describe 查询单个ssh服务器信息
     *
     * @param sshServerConfigQueryOneCommand 查询单个ssh服务器信息     
     * @return {@link Result<SshServerConfigDTO>} ssh服务器信息DTO对象     
     
     * @author Jia wei Wu
     * @date 2025/09/13 10:07 晚上
     **/

    @Override
    public Result<SshServerConfigDTO> findOne(SshServerConfigQueryOneCommand sshServerConfigQueryOneCommand) {
        SshServerConfig sshServerConfig = SshServerConfigDTOAssembler.INSTANCE.toSshServerConfig(sshServerConfigQueryOneCommand);
        return sshServerConfigRepository.findOne(sshServerConfig).convert(SshServerConfigDTOAssembler.INSTANCE::fromSshServerConfig);
    }

    @Override
    public Result<SshServerConfigDTO> findOneById(Integer id) {
        SshServerConfig sshServerConfig = new SshServerConfig();
        sshServerConfig.setIsDeleted(false);
        sshServerConfig.setId(id);
        return sshServerConfigRepository.findOne(sshServerConfig).convert(SshServerConfigDTOAssembler.INSTANCE::fromSshServerConfig);
    }

    /**
     * describe 查询多个ssh服务器信息
     *
     * @param sshServerConfigQueryListCommand 查询多个ssh服务器信息     
     * @return {@link Result<List<SshServerConfigDTO>>} ssh服务器信息DTO对象     
     
     * @author Jia wei Wu
     * @date 2025/09/13 10:07 晚上
     **/

    @Override
    public Result<List<SshServerConfigDTO>> findList(SshServerConfigQueryListCommand sshServerConfigQueryListCommand) {
        SshServerConfig sshServerConfig = SshServerConfigDTOAssembler.INSTANCE.toSshServerConfig(sshServerConfigQueryListCommand);
        return sshServerConfigRepository.findList(sshServerConfig)        .convert(sshServerConfigs -> sshServerConfigs.stream().map(SshServerConfigDTOAssembler.INSTANCE::fromSshServerConfig).collect(Collectors.toList())) ;
    }

    /**
     * describe 分页查询多个ssh服务器信息
     *
     * @param sshServerConfigQueryListCommand 分页查询多个ssh服务器信息     
     * @return {@link Result<LazyPage<SshServerConfigDTO>>} 分页ssh服务器信息DTO对象     
     
     * @author Jia wei Wu
     * @date 2025/09/13 10:07 晚上
     **/

    @Override
    public Result<LazyPage<SshServerConfigDTO>> findPage(int size,int current,SshServerConfigQueryListCommand sshServerConfigQueryListCommand) {
        SshServerConfig sshServerConfig = SshServerConfigDTOAssembler.INSTANCE.toSshServerConfig(sshServerConfigQueryListCommand);
        return sshServerConfigRepository.findPage(size,current,sshServerConfig)        .convert(page -> page.convert(SshServerConfigDTOAssembler.INSTANCE::fromSshServerConfig))            ;
    }

    /**
     * describe 删除ssh服务器信息
     *
     * @param sshServerConfigRemoveCommand 删除ssh服务器信息     
     * @return {@link Result<SshServerConfig>} ssh服务器信息     
     
     * @author Jia wei Wu
     * @date 2025/09/13 10:07 晚上
     **/

    @Override
    public Result<SshServerConfig> remove(SshServerConfigRemoveCommand sshServerConfigRemoveCommand) {
     SshServerConfig sshServerConfig = SshServerConfigDTOAssembler.INSTANCE.toSshServerConfig(sshServerConfigRemoveCommand);
     return sshServerConfigRepository.remove(sshServerConfig);
    }

    /**
     * describe 导出ssh服务器信息
     *
     * @param sshServerConfigQueryListCommand 导出ssh服务器信息     
     * @return {@link List< SshServerConfigExcelExport >} ssh服务器信息
     
     * @author Jia wei Wu
     * @date 2025/09/13 10:07 晚上
     **/

    @Override
    public List<SshServerConfigExcelExport> exportExcel(SshServerConfigQueryListCommand sshServerConfigQueryListCommand) {
     SshServerConfig sshServerConfig = SshServerConfigDTOAssembler.INSTANCE.toSshServerConfig(sshServerConfigQueryListCommand);
        return sshServerConfigRepository.findList(sshServerConfig)        .applyOther(sshServerConfigs -> sshServerConfigs.stream().map(SshServerConfigDTOAssembler.INSTANCE::fromSshServerConfigToExcelExport).collect(Collectors.toList())) ;
    }

    /**
     * describe 导入ssh服务器信息
     *
     * @param sshServerConfigExcelImportList 导入ssh服务器信息     
     * @return {@link Result<SshServerConfigExcelImport>} ssh服务器信息     
     
     * @author Jia wei Wu
     * @date 2025/09/13 10:07 晚上
     **/

    @Override
    public Result<List<SshServerConfigExcelImport>> importExcel(List<SshServerConfigExcelImport> sshServerConfigExcelImportList) {
        List<SshServerConfig> sshServerConfigList = sshServerConfigExcelImportList.stream().map( SshServerConfigDTOAssembler.INSTANCE::toSshServerConfig).collect(Collectors.toList());
        sshServerConfigRepository.batchStory(sshServerConfigList);
        return ResultFactory.successOf(sshServerConfigExcelImportList);
    }
}